﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using JA.Negocios;
using JA.Negocios.Cadastros;

namespace JA.Web.Apresentacao
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.rbTransVda.Checked = true;

                TipoVO tipoVO = TipoVO.CreateTipoVO(-1, "Selecione");
                List<TipoVO> tipoVOs = new List<TipoVO>();
                tipoVOs.Add(tipoVO);
                tipoVOs.AddRange(ModelBO.getTipos());
                this.ddlTipo.DataSource = tipoVOs;
                this.ddlTipo.DataBind();

                if (this.Session["rbTodos"] != null) this.rbDormTodos.Checked = (bool)this.Session["rbTodos"];
                if (this.Session["rbdomr2"] != null) this.rbDorm2.Checked = (bool)this.Session["rbdomr2"];
                if (this.Session["rbdomr3"] != null) this.rbDorm4.Checked = (bool)this.Session["rbdomr3"];
                if (this.Session["rbdomr4"] != null) this.rbDorm4.Checked = (bool)this.Session["rbdomr4"];

                carregaTipo();
                if (this.Session["ddlTipo"] != null) ddlTipo.SelectedValue = this.Session["ddlTipo"].ToString();

                carregaEstado();
                if (this.Session["ddlEstado"] != null) ddlEstado.SelectedValue = this.Session["ddlEstado"].ToString();

                carregaCidade(ddlEstado.SelectedValue);
                if (this.Session["ddlCidade"] != null) ddlCidade.SelectedValue = this.Session["ddlCidade"].ToString();

                carregaBairro(int.Parse(ddlCidade.SelectedValue));
                if (this.Session["ddlBairro"] != null) ddlBairro.SelectedValue = this.Session["ddlBairro"].ToString();
                if (this.Session["ddlBairro2"] != null) ddlBairro2.SelectedValue = this.Session["ddlBairro2"].ToString();

                tryFindImovel();
            }

            this.lblDorm.Text = (rbDormTodos.Checked ? "Todos" :
                                (rbDorm1.Checked ? "1" :
                                (rbDorm2.Checked ? "2" :
                                (rbDorm3.Checked ? "3" : "4 ou mais"))));
            this.lblTipo.Text = (this.ddlTipo.SelectedValue.Equals("-1") ? "Todos" : this.ddlTipo.SelectedItem.Text);
            this.lblUF.Text = (this.ddlEstado.SelectedValue.Equals("-1") ? "Todos" : this.ddlEstado.SelectedItem.Text);
            this.lblCid.Text = (this.ddlCidade.SelectedValue.Equals("-1") ? "Todas" : this.ddlCidade.SelectedItem.Text);
            this.lblBai.Text = (this.ddlBairro.SelectedValue.Equals("-1") ? "Todos" : this.ddlBairro.SelectedItem.Text);
            this.lblBai2.Text = (this.ddlBairro2.SelectedValue.Equals("-1") ? "Todos" : this.ddlBairro2.SelectedItem.Text);
        }
        public void rbDorm_CheckedChanged(object sender, EventArgs e)
        {
            this.Session["rbTodos"] = this.rbDormTodos.Checked;
            this.Session["rbdomr2"] = this.rbDorm2.Checked;
            this.Session["rbdomr3"] = this.rbDorm4.Checked;
            this.Session["rbdomr4"] = this.rbDorm4.Checked;
            tryFindImovel();
        }

        protected void carregaTipo()
        {
            TipoVO tipoVO = TipoVO.CreateTipoVO(-1, "Selecione");
            List<TipoVO> tipoVOs = new List<TipoVO>();
            tipoVOs.Add(tipoVO);
            tipoVOs.AddRange(ModelBO.getTipos());
            this.ddlTipo.DataSource = tipoVOs;
            this.ddlTipo.DataBind();

            this.ddlTipo.SelectedValue = "-1";
        }
        protected void ddlTipo_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.Session["ddlTipo"] = ddlTipo.SelectedValue;
            tryFindImovel();
        }

        protected void carregaEstado()
        {
            UfVO ufVO = UfVO.CreateUfVO("-1", "Selecione");
            List<UfVO> ufVOs = new List<UfVO>();
            ufVOs.Add(ufVO);
            ufVOs.AddRange(ModelBO.getUfs());
            this.ddlEstado.DataSource = ufVOs;
            this.ddlEstado.DataBind();

            this.ddlEstado.SelectedValue = "-1";
        }
        protected void ddlEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.Session["ddlEstado"] = ddlEstado.SelectedValue;

            carregaCidade(this.ddlEstado.SelectedValue);
            ddlCidade_SelectedIndexChanged(null, null);
        }

        protected void carregaCidade(string siglaUf)
        {
            CidadeVO cidadeVO = CidadeVO.CreateCidadeVO(-1, "Selecione");
            List<CidadeVO> cidadeVOs = new List<CidadeVO>();
            cidadeVOs.Add(cidadeVO);

            cidadeVOs.AddRange(ModelBO.getCidades(null, null, siglaUf));

            this.ddlCidade.DataSource = cidadeVOs;
            this.ddlCidade.DataBind();

            this.ddlCidade.SelectedValue = "-1";
        }
        protected void ddlCidade_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.Session["ddlCidade"] = ddlCidade.SelectedValue;

            carregaBairro(int.Parse(this.ddlCidade.SelectedValue));
            ddlBairro_SelectedIndexChanged(null, null);
        }

        protected void carregaBairro(int idCidade)
        {
            BairroVO bairroVO = BairroVO.CreateBairroVO(-1, "Selecione");
            List<BairroVO> bairroVOs = new List<BairroVO>();
            bairroVOs.Add(bairroVO);

            List<BairroVO> bairroVOsTmp = ModelBO.getBairros(null, null, null, idCidade);
            if (bairroVOsTmp != null)
            {
                foreach (BairroVO bVO in bairroVOsTmp)
                {
                    if (ModelBO.getImoveis(null, null, null, null, null, null, bVO.idBairro, null, null, null, true, true).Count > 0)
                    {
                        bairroVOs.Add(bVO);
                    }
                }
            }

            this.ddlBairro.DataSource = bairroVOs;
            this.ddlBairro.DataBind();

            this.ddlBairro2.DataSource = bairroVOs;
            this.ddlBairro2.DataBind();

            this.ddlBairro.SelectedValue = "-1";
            this.ddlBairro2.SelectedValue = "-1";
        }
        protected void ddlBairro_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.Session["ddlBairro"] = ddlBairro.SelectedValue;
            this.Session["ddlBairro2"] = ddlBairro2.SelectedValue;
            tryFindImovel();
        }

        protected void tryFindImovel()
        {
            int? idTipo = null;
            int? idBairro = null;
            int? idBairroAdic = null;
            int? nquartos = null;

            if (this.ddlTipo.Items.Count > 0 && !this.ddlTipo.SelectedValue.Equals("-1"))
                idTipo = int.Parse(this.ddlTipo.SelectedValue);

            if (!rbDormTodos.Checked)
            {
                nquartos = (rbDorm1.Checked ? 1 :
                    (rbDorm2.Checked ? 2 :
                    (rbDorm3.Checked ? 3 : 4)));
            }
            if (this.ddlBairro.Items.Count > 0)
            {
                if (!this.ddlBairro.SelectedValue.Equals("-1"))
                {
                    idBairro = int.Parse(this.ddlBairro.SelectedValue);
                }
                if (!this.ddlBairro2.SelectedValue.Equals("-1"))
                {
                    idBairroAdic = int.Parse(this.ddlBairro2.SelectedValue);
                }
                if (idBairro != null || idBairroAdic != null)
                {
                    List<ImovelVO> imovelVOs = ModelBO.getImoveis(null, null, idTipo, null, null, null, idBairro, idBairroAdic, nquartos, null, true, true);
                    this.RepeaterImoveis.DataSource = imovelVOs;
                    this.RepeaterImoveis.DataBind();
                    this.PanelWelcome.Visible = imovelVOs.Count == 0;
                    this.PanelImoveis.Visible = imovelVOs.Count > 0;
                    return;
                }
            }
            this.PanelWelcome.Visible = true;
            this.PanelImoveis.Visible = false;
        }

        protected void btContatoClick(object sender, EventArgs e)
        {
            Util.WindowOpen(this, "Não-Selecionado");
        }
        protected void btVendaClick(object sender, EventArgs e)
        {
            Util.WindowOpenVenda(this);
        }

        protected void teste(object sender, EventArgs e)
        {
            FotoBO fotoBO = new FotoBO();
            List<imovelxfotos> fotoVOs = fotoBO.RecuperaFotos();

            foreach (imovelxfotos foto in fotoVOs)
            {
                System.Drawing.Image img = Util.byteArrayToImage(foto.Foto);
                foto.Foto = Util.imageToByteArray(Util.MaxSize(img, 600, 450));
                foto.FotoLarge = Util.imageToByteArray(Util.MaxSize(img, 300, 225));
                foto.FotoMedium = Util.imageToByteArray(Util.MaxSize(img, 150, 112));
                foto.FotoSmall = Util.imageToByteArray(Util.MaxSize(img, 60, 45));
                img.Dispose();

                fotoBO.SalvarFoto(foto, false);

            }

        }

        protected void txtIdImovel_TextChanged(object sender, EventArgs e)
        {
            TextBox txtIdImovel = (TextBox)sender;
            if (txtIdImovel.Text == "") return;
            
            // Procurar Imóvel com ID igual ao digitado na TextBox
            if (ModelBO.getImovel(Int32.Parse(txtIdImovel.Text), null) != null)
                Response.Redirect("DetalheImovel.aspx?idImovel=" + txtIdImovel.Text);
            else
            {
                txtIdImovel.Text = "";
                txtIdImovel.Focus();
                Util.ExibeAlert(this, "Imóvel não encontrado!");
            }
        }

    }
}
